package cn.tedu.charging.device.startup;

import cn.tedu.charging.device.dao.repository.StationCacheRepository;
import cn.tedu.charging.device.dao.repository.StationRepository;
import cn.tedu.charging.device.pojo.StationPO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;

import javax.annotation.PostConstruct;
import java.util.List;

/**
 *
 * 类 ChargingStationDataInit 实现了 ApplicationRunner 接口
 * 1 在项目启动的时候 调用run方法
 * 2 从数据库查询 场站信息 charging_station
 * 3 存储到Redis
 */
@Slf4j
@Component
public class StationDataInit implements ApplicationRunner {

    //理解bean的生命周期
    //https://blog.csdn.net/weixin_40382222/article/details/140338443
  /*  @PostConstruct
    public void init() {
        log.debug("PostConstruct#init方法被调用了");
    }*/

    @Autowired
    private StationRepository stationRepository;

    @Autowired
    @Qualifier("GEOANDShareHash")
    private StationCacheRepository stationCacheRepository;

    @Override
    public void run(ApplicationArguments args) throws Exception {
        log.debug("StationDataInit#run方法被调用了");
        log.debug("缓存预热，在项目启动的时候，从数据库查询场站信息存储到Redis");
        List<StationPO> stationPOS = stationRepository.getAllStation();
        log.debug("从数据库查询场站信息,结果:{}", stationPOS);
        if (!CollectionUtils.isEmpty(stationPOS)){
            //如果场站信息不为空 保存信息到Redis
            //场站信息 有两类 位置信息（经纬度），基本信息（场站名称，联系方式...）
            //存一起 位置信息  基本信息  GEO 业务是OK

            //分开存 位置信息 GEO
            // 基本信息 String  可以给附近充电站接口使用，也可以给场站详情使用 缓存的基本信息能复用

            //分开存 位置信息 GEO 基本信息 Hash

            log.debug("保存场站信息到Redis");
            stationCacheRepository.save(stationPOS);
            log.debug("保存场站信息到Redis成功");
        }else {
            log.error("未找到场站信息，告警告警告警");
        }
    }
}
